﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NeurOthello.Logic
{

    public class Position
    {
        private int x, y;
        public int X { get { return x; } set { x = value; } }
        public int Y { get { return y; } set { y = value; } }

        public Position(int x, int y)
        {
            this.x = x;
            this.y = y;
        }



        public bool IsValidPos()
        {
            return (x >= 0 && x < Othello.boardSize &&
                y >= 0 && y < Othello.boardSize);
        }

        public static Position operator +(Position d1, Position d2)
        {
            return new Position(d1.X + d2.X, d1.Y + d2.Y);
        }

        public static Position operator ++(Position d1)
        {
            if (d1.x >= Othello.boardSize - 1 && d1.y >= Othello.boardSize - 1)
                return null;
            if (d1.x >= Othello.boardSize - 1)
                return new Position(0, d1.Y + 1);
            return new Position(d1.X + 1, d1.Y);
        }

        public static Position operator -(Position d1, Position d2)
        {
            return new Position(d1.X - d2.X, d1.Y - d2.Y);
        }

        public static bool operator ==(Position d1, Position d2)
        {
            if ((object)d1 == null && !((object)d2 == null))
                return false;
            if (!((object)d1 == null) && ((object)d2 == null))
                return false;
            if ((object)d1 == null && (object)d2 == null)
                return true;    
            if (d1.X == d2.X && d1.Y == d2.Y)
                return true;
            return false;
        }

        public static bool operator !=(Position d1, Position d2)
        {
            if ((object)d1 == null && !((object)d2 == null))
                return true;
            if (!((object)d1 == null) && ((object)d2 == null))
                return true;
            if ((object)d1 == null && (object)d2 == null)
                return false;            
            if (d1.X == d2.X && d1.Y == d2.Y)
                return false;
            return true;
        }

        public override string ToString()
        {
            return "[" + x + ", " + y + "]";
        }
    }
}
